import config from '@/config';
import cache from '@/utils/cache';
import { onMounted } from 'vue';
import { useUsersStore } from '@/store/user';
import AMapLoader from '@amap/amap-jsapi-loader';
// 初始化定位
function useLocation () 
{
    const userStore = useUsersStore();
    // 初始化定位
    const initLocation = () => 
    {
        AMapLoader.load({
            key:config.mapKey,  // 申请好的Web端开发者Key，首次调用 load 时必填
            version:'2.0',      // 指定要加载的 JSAPI 的版本，缺省时默认为 1.4.15
            plugins:[
                'AMap.ToolBar',  'AMap.CitySearch', 'AMap.Geocoder', 'AMap.Geolocation',
                'AMap.Scale', 'AMap.AutoComplete', 'AMap.PlaceSearch', 'AMap.Weather']     // 需要使用的的插件列表，如比例尺'AMap.Scale'等
        }).then(async (AMap) =>
        {
            userStore.AMapData = AMap;
            if (cache.lnglat.get())
            {
                return;
            }
            
            try
            {
                await getLocationByGPS(AMap);
            }
            catch (err)
            {
                console.error(err);
            }

        }).catch((e) =>
        {
            console.log('获取当前定位失败', e);
        });
    };

    const getLocationByGPS = (AMap) => 
    {
        return new Promise((resolve, reject) => 
        {
            let geolocation = new AMap.Geolocation({
                enableHighAccuracy: true, // 是否使用高精度定位，默认:true
                timeout: 5000,          // 超过10秒后停止定位，默认：5s
                GeoLocationFirst:true,
                buttonPosition:'RB',    // 定位按钮的停靠位置
                buttonOffset: new AMap.Pixel(10, 20), // 定位按钮与设置的停靠位置的偏移量，默认：Pixel(10, 20)
                zoomToAccuracy: true   // 定位成功后是否自动调整地图视野到定位点
            });
            geolocation.getCurrentPosition(async function (status, result)
            {
                if (status === 'complete')
                {
                    let lng = result.position.lng;
                    let lat = result.position.lat;
                    cache.lnglat.set(JSON.stringify([lng, lat]));
                    resolve(true);
                }
                else
                {
                    // 浏览器定位失败，则通过ip定位
                    try
                    {
                        await getLocalionByIp(AMap);
                    }
                    catch (err)
                    {
                        console.error(err);
                        reject(err);
                    }
                }
            });
        });
    };

    const getLocalionByIp = (AMap) => 
    {
        return new Promise((resolve, reject) => 
        {
            let citySearch = new AMap.CitySearch();
            citySearch.getLocalCity(function (status, result) 
            {
                console.log(result);
                
                if (status === 'complete' && result.info === 'OK') 
                {
                    // 查询成功，result即为当前所在城市信息
                    console.log(result);
                    let lnglat = result.rectangle.split(';')[0].split(',');
                    console.log(lnglat);
                    
                    cache.lnglat.set(JSON.stringify([lnglat[0], lnglat[1]]));
                    resolve(true);
                    return;
                }
                reject(new Error('获取当前定位失败', result.message));
            });
        });
    };
    // onMounted(() => 
    // {
    //     initLocation();
    // });
    return { 
        initLocation, 
        getLocalionByIp,
        getLocationByGPS
    };
}

export default useLocation;